/** @file         dm_mamanger.h
 *  @brief        driver mem manager 驱动内存管理器 有关定义,对外接口
 *  @details      定义有关结构体，以及对外的函数
 *  @author       Schips
 *  @date         2020-08-25 10:13:04
 *  @version      v1.0
 *  @copyright    Copyright By Schips, All Rights Reserved
 *
 **********************************************************
 *
 *  @par 修改日志:
 *  <table>
 *  <tr><th>Date       <th>Version   <th>Author    <th>Description
 *  <tr><td>2020-08-25 <td>1.0       <td>Schips    <td>创建初始版本
 *  </table>
 *
 **********************************************************
 */

#ifndef __dm_mamanger__
#define __dm_mamanger__
#include <linux/io.h>
//#include "kernel_list.h"
//#define BLOCK_NAME_SIZE 64

//  驱动内存管理器
struct mem_block {  
    unsigned long    phy_mem_base;
    unsigned long    phy_mem_size;
    struct resource* res;
    void __iomem *   base_va;
    unsigned int     hash; // 用于判断的hash
    char *           name; // 所有的 I/O 内存分配情况都在 /proc/iomem 中列出。
    //char             name[64]; 如果使用数组，会导致无法注册名字到 /proc 文件系统
};

typedef struct node
{
	struct mem_block mem_block;       
	struct list_head list;
}linknode;

#define dm_mamanger linknode 
// 初始化
void dm_manager_init(void);
void dm_manager_deinit(void);

// 注册内存
void __iomem* registe_mem(unsigned long phy_mem_base, unsigned long phy_mem_size, char* name);
void unregiste_mem(char* name);
// 根据 注册内存时提供的名字进行读写操作
int mem_op_w(char *name, unsigned long pos_l, const void *buf, size_t count);
int mem_op_r(char *name, unsigned long pos_l,       void *buf, size_t count);
//void list_all(void);

#endif /* Head define end*/

